<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Unixzeit</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Unixzeit"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Unixzeit rootpage-Unixzeit skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Unixzeit</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p>Die <b>Unixzeit</b> ist eine Zeitdefinition, die für das <a href="Betriebssystem" title="Betriebssystem">Betriebssystem</a> <a href="Unix" title="Unix">Unix</a> entwickelt und als <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-Standard festgelegt wurde. Die Unixzeit zählt die vergangenen Sekunden seit Donnerstag, dem 1. Januar 1970, 00:00 Uhr <a href="Koordinierte_Weltzeit" title="Koordinierte Weltzeit">UTC</a>. Das Startdatum wird auch als <a href="Epoche_(Chronologie)" title="Epoche (Chronologie)"><i>The Epoch</i></a> bezeichnet. Die Umschaltung von einer Sekunde zur nächsten ist synchron zur <a href="Koordinierte_Weltzeit" title="Koordinierte Weltzeit">UTC</a>. <a href="Schaltsekunde" title="Schaltsekunde">Schaltsekunden</a> werden ignoriert,<sup id="cite_ref-single-unix-spec-rationale-4.16_1-0" class="reference"><a href="#cite_note-single-unix-spec-rationale-4.16-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> eine Schaltsekunde hat den gleichen Zeitstempel wie die Sekunde davor. Vor Unix Version 6 (1975) zählte die Unix-Uhr in Hundertstelsekunden, daher musste die Epoche jedes Jahr neu festgelegt werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Eigenschaften">Eigenschaften</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Umrechnung">Umrechnung</h3></div>
<p>Die Umrechnung in eine menschenlesbare Form, einschließlich der Anwendung von <a href="Zeitzone" title="Zeitzone">Zeitzonen</a>, <a href="Sommerzeit" title="Sommerzeit">Sommerzeit</a> und <a href="Schaltjahr" title="Schaltjahr">Schaltjahren</a> werden dann von zusätzlichen Funktionen der <a href="Standardbibliothek" title="Standardbibliothek">Standardbibliothek</a> übernommen. Die Darstellung des Datums als Sekunden seit der Unix-Epoche wird häufig verwendet, weil sie für <a href="Computerprogramm" title="Computerprogramm">Computerprogramme</a> viel leichter zu verarbeiten ist als das „menschliche“ Datumsformat. Es lassen sich mit diesen Werten leicht Zeiträume als Differenzen von Sekunden berechnen. Sommer- oder Winterzeit, Zeitzonen und Schaltsekunden spielen dann keine Rolle mehr. Aus diesem Grund wird dieser Wert auch gerne als <a href="Zeitstempel" title="Zeitstempel">Zeitstempel</a> verwendet. In praktisch allen Server-Anwendungen spielt der Zeitstempel eine tragende Rolle, so etwa im Umfeld von <a href="PHP" title="PHP">PHP</a>- oder <a href="MySQL" title="MySQL">MySQL</a>-Applikationen bei der Unterscheidung und Generierung zeitbezogener <a href="Datenbank" title="Datenbank">Datenbank</a>-Einträge. Die vordefinierten PHP-<a href="Funktion_(Programmierung)" title="Funktion (Programmierung)">Funktionen</a> <code>date()</code> und <code>mktime()</code> ermöglichen hier beispielsweise durch das Einsetzen passender <a href="Funktionsargument" class="mw-redirect" title="Funktionsargument">Funktionsargumente</a> die einfache Konvertierung eines Zeitstempels in ein menschenlesbares Datumsformat und umgekehrt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Jahr-2038-Problem">Jahr-2038-Problem</h3></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Jahr-2038-Problem" title="Jahr-2038-Problem">Jahr-2038-Problem</a></i></div>
<p>Der POSIX-Standard verlangt für die Zeitangabe in Sekunden seit 1. Januar 1970 mindestens eine <a href="Zweierkomplement" title="Zweierkomplement">vorzeichenbehaftete</a> 32-<a href="Bit" title="Bit">Bit</a>-Zahl (<a href="Integer_(Datentyp)" title="Integer (Datentyp)">Integer</a>). Somit umfasst die Unixzeit garantiert die Werte −2.147.483.648 bis +2.147.483.647. Umgerechnet in Jahre entspricht dies etwas mehr als −68 bis +68.
</p><p>Am 19. Januar 2038 um 3:14:08 Uhr UTC wird es daher bei Computersystemen, welche die Unixzeit in einer vorzeichenbehafteten 32-Bit-<a href="Variable_(Programmierung)" title="Variable (Programmierung)">Variable</a> speichern, zu einem <a href="Arithmetischer_%C3%9Cberlauf" title="Arithmetischer Überlauf">Überlauf</a>, und mithin zu einem Rücksprung kommen.
</p><p>Unixzeiten vor dem 13. Dezember 1901 20:45:52 UTC sind mit einer vorzeichenbehafteten 32-Bit-Zahl auch nicht darstellbar, da die Zeitstempel kleiner als −2.147.483.648 wären.
</p><p>Moderne Unix-Systeme verwenden zumindest in ihrer 64-Bit-Variante eine vorzeichenbehaftete 64-Bit-Zahl, bei der das Risiko eines Überlaufs ohne praktische Relevanz ist. Hier ließen sich Zeitspannen von bis zu 292 Milliarden Jahren korrekt darstellen.
</p><p><a href="Eingebettetes_System" title="Eingebettetes System">Eingebettete Systeme</a> auf Unix-Basis sind zurzeit noch nahezu ausschließlich 32-Bit-Systeme. Die fortlaufende Entwicklung, technische Geräte (z. B. <a href="Router" title="Router">Router</a>, Radiowecker bis hin zu Automobilen und Flugzeugen) mit eingebetteten Systemen auf Unix-Basis auszustatten, bedingt, dass diese Geräte ab dem 19. Januar 2038 nicht mehr korrekt funktionieren.
</p><p>Verwendet ein Entwickler den vorzeichenlosen (unsigned-) 32-bit-Typ, könnte er die Unix-Zeit noch bis über das Jahr 2100 hinaus verwenden. Das gilt allerdings nicht, wenn er die Standardbibliothek nutzt. Diese ist auf den minimalen POSIX-Standard festgelegt.
</p>
<div class="mw-heading mw-heading3"><h3 id="Schaltsekunden">Schaltsekunden</h3></div>
<p><a href="Schaltsekunde" title="Schaltsekunde">Schaltsekunden</a> werden in der Unixzeit nicht mitgezählt, da sie nicht regelmäßig auftreten, sondern je nach schwankender Erdrotation nur sechs Monate vor ihrer Einfügung <a href="Schaltsekunde#Zukunft" title="Schaltsekunde">angekündigt</a> werden. Alle Tage sind in Unixzeit genau 24 × 3600 Sekunden lang, Zeitdifferenzen in Unixzeit, die über eine Schaltsekunde hinweggehen, sind daher um diese Sekunde zu kurz.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>In den letzten Jahren gab es mehrere Versuche, im Rahmen der POSIX-Standardisierung eine Darstellung der Schaltsekunde zur POSIX-Unix-Zeitdefinition hinzuzufügen. Die Diskussionen zu diesem Thema führten jedoch bislang nicht zu einem allgemein akzeptierten Ergebnis.
</p>
<div class="mw-heading mw-heading2"><h2 id="Vergleich">Vergleich</h2></div>
<p>Für die menschliche Anwendung sind auf Abschnitte herunter gebrochenen Zeiten, etwa Anzahl Jahre, Monate, Tage, Stunde mit zusätzlichen Angaben für Zeitzone und Sommerzeit übersichtlicher. Soweit eine alltägliche Zeit ohne Angabe von Sommerzeit und Zeitzone erfolgt, bleibt sie für eine computertechnische Verarbeitung allerdings noch unvollständig. Die gebrochene Darstellung macht Berechnungen in jedem Fall aufwändiger.
</p><p>Unix bietet eine Konvertierung der Unixzeit in eine gebrochene Darstellung mittels <code>localtime()</code>an. Sommerzeit und Zeitzone werden von dieser Funktion, für den Anwender meist unsichtbar, aus administrativen Einstellungen des Systems bezogen – deshalb local-time.
</p><p>In den <a href="Disk_Operating_System" title="Disk Operating System">DOS</a>-Systemen war die gebrochene Zeit, aber ohne Zeitzonenangabe, das Standardformat und wird auf <a href="File_Allocation_Table" title="File Allocation Table">FAT</a>-Dateisystemen für Zeitstempel der Dateien in einer kompakten Darstellung gespeichert.
</p><p>Eine Zeitangabe kann auch als <a href="Gleitkommazahl" title="Gleitkommazahl">Gleitkommazahl</a> gespeichert werden. So ist z. B. bei Nutzung des <a href="Doppelte_Genauigkeit" title="Doppelte Genauigkeit">Double-Formats</a> eine sekundengenaue Auflösung für die nächsten ca. 285 Millionen Jahre möglich.
</p>
<div class="sieheauch" role="navigation" style="font-style:italic;"><span class="sieheauch-text">Siehe auch</span>: <a href="Julianisches_Datum" title="Julianisches Datum">Julianisches Datum</a></div>
<div class="mw-heading mw-heading2"><h2 id="Besondere_Werte">Besondere Werte</h2></div>
<p>Unix-Enthusiasten haben es sich zum Brauch gemacht, zu bestimmten Werten der Unixzeit sogenannte „time_t-Partys“ – ähnliche den <a href="Neujahr" title="Neujahr">Neujahrsfeiern</a> zum Jahreswechsel – zu veranstalten. Üblicherweise werden runde Dezimal-Werte, wie 1.000.000.000 oder 2.000.000.000 gefeiert. Unter manchen Benutzern werden allerdings auch runde Binär-Werte gefeiert, beispielsweise +2<sup>30</sup> (1.073.741.824), welcher auf den 10. Jan. 2004 13:37:04 UTC fiel. Am 13. Feb. 2009 um 23:31:30 UTC (14. Feb. 2009 um 00:31:30 CET) erreichte die Unixzeit den Wert 1234567890. <a href="Heise_online" title="Heise online">Heise Online</a> erwähnte dieses Ereignis in seinem Newsticker.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>
</p><p>Diese Zeitpunkte werden üblicherweise als „n Sekunden seit der Unix-Epoche“ gefeiert. Durch die Einführung von <a href="Schaltsekunde" title="Schaltsekunde">Schaltsekunden</a> ist diese Bezeichnung allerdings nicht ganz korrekt.
</p>
<table class="wikitable" style="text-align:right;">
<tbody><tr class="hintergrundfarbe6">
<th colspan="3">Wert
</th>
<th rowspan="2">Zeitpunkt (UTC)
</th></tr>
<tr class="hintergrundfarbe6">
<th>arithm.
</th>
<th>dezimal
</th>
<th>hexadez.
</th></tr>
<tr>
<td>−2<sup>31</sup></td>
<td>−2 147 483 648
</td>
<td><b>80 00 00 00</b>
</td>
<td>13. Dez. 1901 20:45:52
</td></tr>
<tr>
<td>−2<sup>30</sup></td>
<td>−1 073 741 824
</td>
<td><b>C0 00 00 00</b>
</td>
<td>23. Dez. 1935 10:22:56
</td></tr>
<tr>
<td></td>
<td><b>−1 000 000 000</b>
</td>
<td>C4 65 36 00
</td>
<td>24. April 1938 22:13:20
</td></tr>
<tr>
<td>−2<sup>29</sup></td>
<td>−536 870 912
</td>
<td><b>E0 00 00 00</b>
</td>
<td>27. Dez. 1952 05:11:28
</td></tr>
<tr>
<td>−2<sup>28</sup></td>
<td>−268 435 456
</td>
<td><b>F0 00 00 00</b>
</td>
<td>30. Juni 1961 02:35:44
</td></tr>
<tr>
<td></td>
<td><b>0</b>
</td>
<td><b>00 00 00 00</b>
</td>
<td>1. Jan. 1970 00:00:00
</td></tr>
<tr>
<td>2<sup>16</sup></td>
<td>65 536
</td>
<td><b>00 01 00 00</b>
</td>
<td>1. Jan. 1970 18:12:16
</td></tr>
<tr>
<td>2<sup>24</sup></td>
<td>16 777 216
</td>
<td><b>01 00 00 00</b>
</td>
<td>14. Juli 1970 04:20:16
</td></tr>
<tr>
<td></td>
<td><b>100 000 000</b>
</td>
<td>05 F5 E1 00
</td>
<td>3. März 1973 09:46:40
</td></tr>
<tr>
<td>2<sup>28</sup></td>
<td><span style="visibility:hidden;">0</span>268 435 456
</td>
<td><b>10 00 00 00</b>
</td>
<td>4. Juli 1978 21:24:16
</td></tr>
<tr>
<td></td>
<td><b>500 000 000</b>
</td>
<td>1D CD 65 00
</td>
<td>5. Nov. 1985 00:53:20
</td></tr>
<tr>
<td>2<sup>29</sup></td>
<td><span style="visibility:hidden;">0</span>536 870 912
</td>
<td><b>20 00 00 00</b>
</td>
<td>5. Jan. 1987 18:48:32
</td></tr>
<tr>
<td></td>
<td>805 306 368
</td>
<td><b>30 00 00 00</b>
</td>
<td>9. Juli 1995 16:12:48
</td></tr>
<tr>
<td></td>
<td><b>1 000 000 000</b>
</td>
<td>3B 9A CA 00
</td>
<td>9. Sep. 2001 01:46:40
</td></tr>
<tr>
<td>2<sup>30</sup></td>
<td>1 073 741 824
</td>
<td><b>40 00 00 00</b>
</td>
<td>10. Jan. 2004 13:37:04
</td></tr>
<tr>
<td></td>
<td><b>1 111 111 111</b>
</td>
<td>42 3A 35 C7
</td>
<td>18. März 2005 01:58:31
</td></tr>
<tr>
<td></td>
<td><b>1 234 567 890</b>
</td>
<td>49 96 02 D2
</td>
<td>13. Feb. 2009 23:31:30
</td></tr>
<tr>
<td></td>
<td><b>1 300 000 000</b>
</td>
<td>4D 7C 6D 00
</td>
<td>13. März 2011 07:06:40
</td></tr>
<tr>
<td></td>
<td>1 342 177 280
</td>
<td><b>50 00 00 00</b>
</td>
<td>13. Juli 2012 11:01:20
</td></tr>
<tr>
<td></td>
<td><b>1 400 000 000</b>
</td>
<td>53 72 4E 00
</td>
<td>13. Mai 2014 16:53:20
</td></tr>
<tr>
<td></td>
<td><b>1 500 000 000</b>
</td>
<td>59 68 2F 00
</td>
<td>14. Juli 2017 02:40:00
</td></tr>
<tr>
<td></td>
<td><b>1 600 000 000</b>
</td>
<td>5F 5E 10 00
</td>
<td>13. Sep. 2020 12:26:40
</td></tr>
<tr>
<td>1,5 · 2<sup>30</sup></td>
<td>1 610 612 736
</td>
<td><b>60 00 00 00</b>
</td>
<td>14. Jan. 2021 08:25:36
</td></tr>
<tr>
<td></td>
<td><b>1 700 000 000</b>
</td>
<td>65 53 F1 00
</td>
<td>14. Nov. 2023 22:13:20
</td></tr>
<tr>
<td></td>
<td><b>1 800 000 000</b>
</td>
<td>6B 49 D2 00
</td>
<td>15. Jan. 2027 08:00:00
</td></tr>
<tr>
<td></td>
<td>1 879 048 192
</td>
<td><b>70 00 00 00</b>
</td>
<td>18. Juli 2029 05:49:52
</td></tr>
<tr>
<td></td>
<td><b>1 900 000 000</b>
</td>
<td>71 3F B3 00
</td>
<td>17. März 2030 17:46:40
</td></tr>
<tr>
<td></td>
<td><b>2 000 000 000</b>
</td>
<td>77 35 94 00
</td>
<td>18. Mai 2033 03:33:20
</td></tr>
<tr>
<td></td>
<td><b>2 100 000 000</b>
</td>
<td>7D 2B 75 00
</td>
<td>18. Juli 2036 13:20:00
</td></tr>
<tr>
<td>2<sup>31</sup>−1</td>
<td>2 147 483 647
</td>
<td><b>7F FF FF FF</b>
</td>
<td>19. Jan. 2038 03:14:07
</td></tr>
<tr>
<th colspan="4">Bei Verwendung des vorzeichenlosen<br>(unsigned-) 32-bit-Typ
</th></tr>
<tr>
<td>2<sup>32</sup>−1</td>
<td>4 294 967 295
</td>
<td><b>FF FF FF FF</b>
</td>
<td>7. Feb. 2106 06:28:15
</td></tr></tbody></table>
<div class="mw-heading mw-heading2"><h2 id="Unix-Befehle">Unix-Befehle</h2></div>
<p>Bei einigen Unix-ähnlichen Systemen lässt sich mittels nachstehendem Befehl eine Unixzeit in die äquivalente UTC-Zeit umrechnen (das Verhalten von <i>date</i> aus dem Beispiel ist nicht Bestandteil des <a href="Portable_Operating_System_Interface" class="mw-redirect" title="Portable Operating System Interface">POSIX</a>-Standards).
</p>
<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span>date<span class="w"> </span>-u<span class="w"> </span>-d<span class="w"> </span>@UNIXTIME
</pre></div>
<p>Beispiel:
</p>
<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span>date<span class="w"> </span>-u<span class="w"> </span>-d<span class="w"> </span>@1234567890
<span class="w"> </span>Fr<span class="w"> </span><span class="m">13</span>.<span class="w"> </span>Feb<span class="w"> </span><span class="m">23</span>:31:30<span class="w"> </span>UTC<span class="w"> </span><span class="m">2009</span>
</pre></div>
<p>Umgekehrt lässt sich die aktuelle Anzahl der vergangenen Sekunden seit dem 1. Januar 1970 auf einigen Unix-/Linux-Systemen mittels
</p>
<div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span>date<span class="w"> </span>+%s
</pre></div>
<p>anzeigen (das Verhalten von <i>date</i> ist auch hier nicht Bestandteil des POSIX-Standards).
</p>
<div class="mw-heading mw-heading2"><h2 id="Beispiel-Implementierung">Beispiel-Implementierung</h2></div>
<p>Möchte man die Unixzeit zu einem gegebenen Zeitpunkt berechnen, lässt sich das über folgenden Rechenweg bewerkstelligen. Die Unixzeit kennt keine Zeitzonen. Sie nutzt als Eingabe eine von Zeitzonen bereinigte Zeit. Schaltsekunden werden mangels Vorhersagbarkeit weder für die Vergangenheit noch für die Zukunft berücksichtigt.
</p><p><i>Achtung: Der folgende Quelltext ist in der Programmiersprache C verfasst und arbeitet mit maschinenabhängigen Datentypen. Das Jahr-2038-Problem tritt bei diesem Programm jedoch nicht auf, da der verwendete Datentyp „long long“ mindestens 64 Bits besitzt. Wie jeder Beispielquelltext dient er allein der Illustration und sollte ohne Überprüfung nicht in den Praxiseinsatz übernommen werden.</i>
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cm">/** Konvertiert gegliederte UTC-Angaben in Unix-Zeit.</span>
<span class="cm"> * Parameter und ihre Werte-Bereiche:</span>
<span class="cm"> * - jahr [1970..2038]</span>
<span class="cm"> * - monat [1..12]</span>
<span class="cm"> * - tag [1..31]</span>
<span class="cm"> * - stunde [0..23]</span>
<span class="cm"> * - minute [0..59]</span>
<span class="cm"> * - sekunde [0..59]</span>
<span class="cm"> */</span>
<span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="nf">unixzeit</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">jahr</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">monat</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">tag</span><span class="p">,</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">stunde</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">minute</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">sekunde</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">short</span><span class="w"> </span><span class="n">tage_seit_jahresanfang</span><span class="p">[</span><span class="mi">12</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="cm">/* Anzahl der Tage seit Jahresanfang ohne Tage des aktuellen Monats und ohne Schalttag */</span>
<span class="w"> </span><span class="p">{</span><span class="mi">0</span><span class="p">,</span><span class="mi">31</span><span class="p">,</span><span class="mi">59</span><span class="p">,</span><span class="mi">90</span><span class="p">,</span><span class="mi">120</span><span class="p">,</span><span class="mi">151</span><span class="p">,</span><span class="mi">181</span><span class="p">,</span><span class="mi">212</span><span class="p">,</span><span class="mi">243</span><span class="p">,</span><span class="mi">273</span><span class="p">,</span><span class="mi">304</span><span class="p">,</span><span class="mi">334</span><span class="p">};</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">schaltjahre</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="n">jahr</span><span class="mi">-1</span><span class="p">)</span><span class="mi">-1968</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="w"> </span><span class="cm">/* Anzahl der Schaltjahre seit 1970 (ohne das evtl. laufende Schaltjahr) */</span>
<span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="p">((</span><span class="n">jahr</span><span class="mi">-1</span><span class="p">)</span><span class="mi">-1900</span><span class="p">)</span><span class="o">/</span><span class="mi">100</span>
<span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">((</span><span class="n">jahr</span><span class="mi">-1</span><span class="p">)</span><span class="mi">-1600</span><span class="p">)</span><span class="o">/</span><span class="mi">400</span><span class="p">;</span>
<span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="n">tage_seit_1970</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">jahr</span><span class="mi">-1970</span><span class="p">)</span><span class="o">*</span><span class="mi">365</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">schaltjahre</span>
<span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">tage_seit_jahresanfang</span><span class="p">[</span><span class="n">monat</span><span class="mi">-1</span><span class="p">]</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">tag</span><span class="mi">-1</span><span class="p">;</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="p">(</span><span class="n">monat</span><span class="o">></span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">jahr</span><span class="o">%</span><span class="mi">4</span><span class="o">==</span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="p">(</span><span class="n">jahr</span><span class="o">%</span><span class="mi">100</span><span class="o">!=</span><span class="mi">0</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">jahr</span><span class="o">%</span><span class="mi">400</span><span class="o">==</span><span class="mi">0</span><span class="p">))</span><span class="w"> </span><span class="p">)</span>
<span class="w"> </span><span class="n">tage_seit_1970</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="cm">/* +Schalttag, wenn jahr Schaltjahr ist */</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">sekunde</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">60</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="w"> </span><span class="n">minute</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">60</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">stunde</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">24</span><span class="o">*</span><span class="n">tage_seit_1970</span><span class="p">)</span><span class="w"> </span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Eine Umrechnung von einer gegebenen Unixzeit in unsere gewöhnliche Datums- und Zeitdarstellung ist mit folgender Funktion möglich.
</p>
<div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">UnixzeitNachDatumZeit</span><span class="p">(</span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">unixtime</span><span class="p">,</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">pJahr</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">pMonat</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">pTag</span><span class="p">,</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">pStunde</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">pMinute</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="o">*</span><span class="n">pSekunde</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">SEKUNDEN_PRO_TAG</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">86400ul</span><span class="p">;</span><span class="w"> </span><span class="cm">/* 24* 60 * 60 */</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">TAGE_IM_GEMEINJAHR</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">365ul</span><span class="p">;</span><span class="w"> </span><span class="cm">/* kein Schaltjahr */</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">TAGE_IN_4_JAHREN</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1461ul</span><span class="p">;</span><span class="w"> </span><span class="cm">/* 4*365 + 1 */</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">TAGE_IN_100_JAHREN</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">36524ul</span><span class="p">;</span><span class="w"> </span><span class="cm">/* 100*365 + 25 - 1 */</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">TAGE_IN_400_JAHREN</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">146097ul</span><span class="p">;</span><span class="w"> </span><span class="cm">/* 400*365 + 100 - 4 + 1 */</span>
<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">TAGN_AD_1970_01_01</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">719468ul</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Tagnummer bezogen auf den 1. Maerz des Jahres "Null" */</span>
<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">TagN</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TAGN_AD_1970_01_01</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">unixtime</span><span class="o">/</span><span class="n">SEKUNDEN_PRO_TAG</span><span class="p">;</span>
<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">Sekunden_seit_Mitternacht</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">unixtime</span><span class="o">%</span><span class="n">SEKUNDEN_PRO_TAG</span><span class="p">;</span>
<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">long</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">temp</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/* Schaltjahrregel des Gregorianischen Kalenders:</span>
<span class="cm"> Jedes durch 100 teilbare Jahr ist kein Schaltjahr, es sei denn, es ist durch 400 teilbar. */</span>
<span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">TagN</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">TAGE_IN_100_JAHREN</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">TAGE_IN_400_JAHREN</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="o">*</span><span class="n">pJahr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">100</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">temp</span><span class="p">;</span>
<span class="w"> </span><span class="n">TagN</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="n">TAGE_IN_100_JAHREN</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/* Schaltjahrregel des Julianischen Kalenders:</span>
<span class="cm"> Jedes durch 4 teilbare Jahr ist ein Schaltjahr. */</span>
<span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="p">(</span><span class="n">TagN</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">TAGE_IM_GEMEINJAHR</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">TAGE_IN_4_JAHREN</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="o">*</span><span class="n">pJahr</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">temp</span><span class="p">;</span>
<span class="w"> </span><span class="n">TagN</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="n">TAGE_IM_GEMEINJAHR</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">temp</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">4</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/* TagN enthaelt jetzt nur noch die Tage des errechneten Jahres bezogen auf den 1. Maerz. */</span>
<span class="w"> </span><span class="o">*</span><span class="n">pMonat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="mi">5</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">TagN</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">153</span><span class="p">;</span>
<span class="w"> </span><span class="o">*</span><span class="n">pTag</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">TagN</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">pMonat</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">153</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">5</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="cm">/* 153 = 31+30+31+30+31 Tage fuer die 5 Monate von Maerz bis Juli</span>
<span class="cm"> 153 = 31+30+31+30+31 Tage fuer die 5 Monate von August bis Dezember</span>
<span class="cm"> 31+28 Tage fuer Januar und Februar (siehe unten)</span>
<span class="cm"> +2: Justierung der Rundung</span>
<span class="cm"> +1: Der erste Tag im Monat ist 1 (und nicht 0).</span>
<span class="cm"> */</span>
<span class="w"> </span><span class="o">*</span><span class="n">pMonat</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"> </span><span class="cm">/* vom Jahr, das am 1. Maerz beginnt auf unser normales Jahr umrechnen: */</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">pMonat</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">12</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="cm">/* Monate 13 und 14 entsprechen 1 (Januar) und 2 (Februar) des naechsten Jahres */</span>
<span class="w"> </span><span class="o">*</span><span class="n">pMonat</span><span class="w"> </span><span class="o">-=</span><span class="w"> </span><span class="mi">12</span><span class="p">;</span>
<span class="w"> </span><span class="o">++*</span><span class="n">pJahr</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="o">*</span><span class="n">pStunde</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Sekunden_seit_Mitternacht</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">3600</span><span class="p">;</span>
<span class="w"> </span><span class="o">*</span><span class="n">pMinute</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Sekunden_seit_Mitternacht</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mi">3600</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">60</span><span class="p">;</span>
<span class="w"> </span><span class="o">*</span><span class="n">pSekunde</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Sekunden_seit_Mitternacht</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="mi">60</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Diese Funktion erwartet als Eingangsparameter eine vorzeichenlose Ganzzahl („unsigned long int“). Nach dem C-Standard sind das mindestens 32 Bit. Die Funktion liefert somit korrekte Ergebnisse bis mindestens zum Januar 2106.
</p>
<div class="mw-heading mw-heading2"><h2 id="Weblinks">Weblinks</h2></div>
<ul><li><a rel="nofollow" class="external text" href="https://www.unixtimestamp.de/">Aktuelle Unixzeit</a></li>
<li><a rel="nofollow" class="external text" href="https://tools.confirado.de/timestampconverter/index.php">Unixtime Umrechner mit bidirektionaler Umrechnung</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-single-unix-spec-rationale-4.16-1"><span class="mw-cite-backlink"><a href="#cite_ref-single-unix-spec-rationale-4.16_1-0">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16"><i>The Open Group Base Specifications Issue 7, Rationale, section 4.16 Seconds Since the Epoch.</i></a> The OpenGroup,<span class="Abrufdatum"> abgerufen am 22. Januar 2017</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AUnixzeit&rft.title=The+Open+Group+Base+Specifications+Issue+7%2C+Rationale%2C+section+4.16+Seconds+Since+the+Epoch&rft.description=The+Open+Group+Base+Specifications+Issue+7%2C+Rationale%2C+section+4.16+Seconds+Since+the+Epoch&rft.identifier=&rft.publisher=The+OpenGroup&rft.date="> </span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap04.html#tag_21_04_16"><i>General Concepts.</i></a><span class="Abrufdatum"> Abgerufen am 5. Mai 2018</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AUnixzeit&rft.title=General+Concepts&rft.description=General+Concepts&rft.identifier=http%3A%2F%2Fpubs.opengroup.org%2Fonlinepubs%2F9699919799%2Fxrat%2FV4_xbd_chap04.html%23tag_21_04_16"> </span></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Jürgen Schmidt: <a rel="nofollow" class="external text" href="https://www.heise.de/newsticker/meldung/1234567890-194566.html">1234567890</a>, Heise online, 14. Feb. 2009, <a rel="nofollow" class="external text" href="http://web.archive.org/web/20091017192309/http://www.heise.de/newsticker/meldung/1234567890-194566.html">archiviert</a> im Internet Archive</span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-10-31" href="https://de.wikipedia.org/wiki/?title=Unixzeit&oldid=261108569">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>